import java.io.Writer;
import java.util.concurrent.CyclicBarrier;

/**
 * 栅栏测试
 * Created by brss on 2018/3/25.
 */
public class CyclicBarrierTest {
    public static void main(String[] args) {
        int N = 4;
        CyclicBarrier barrier = new CyclicBarrier(N);
        for (int i = 0 ; i < N; i++){
            new Writer(barrier).start();
        }
    }
    static class Writer extends Thread{
        private CyclicBarrier cyclicBarrier;
        public Writer(CyclicBarrier cyclicBarrier){
            this.cyclicBarrier = cyclicBarrier;
        }

        @Override
        public void run() {
            System.out.println("线程"+Thread.currentThread().getName()+"正在写入数据...");
            try{
                Thread.sleep(5000);//以睡眠来模拟数据写入操作
                System.out.println("线程"+Thread.currentThread().getName()+"写入数据完毕，等待其他线程写入");
//                只有await的数量达到了4的时候，这4个线程才能继续前进。在这之前，只要还有一个线程没有执行await，则4个都需要等待。
                cyclicBarrier.await();

            }catch (Exception e){
                e.printStackTrace();
            }
            System.out.println("所有线程写入完毕，继续处理其他任务。。");
        }
    }
}
